package com.lvan.rabbit.consumer.mode1_straight;

import com.lvan.rabbit.utils.RabbitMQUtil;
import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * 直连方式，
 * 生产者直接将消息发送到队列中；
 * 消费者直接从队列中消费消息；
 *
 * @author Lvan
 */
public class Straight1 {

    public static void main(String[] args) throws IOException {
        // 获取连接对象
        Connection connection = RabbitMQUtil.getConnection();
        // 获取连接中通道
        if (connection != null) {
            Channel channel = connection.createChannel();
            // 规定消费者每次只能消费一个消息
            channel.basicQos(1);
            // 通道绑定对于消息队列
            // 参数1: 队列名称，如果队列不存在则自动创建
            // 参数2：用来定义队列是否持久化，数据是否写入磁盘
            // 参数3：是否使用当前连接独占队列
            // 参数4：是否在消息完成后自动删除队列
            // 参数5：额外附加参数
            channel.queueDeclare("TMSG", false, false, false, null);

            // 消费消息
            // 参数1：队列名称
            // 参数2：开启消息自动确认机制,(true: 消费者自动向rabbitMQ确认消息消费，false: 不会自动确认消息消费)
            // 参数3：回调接口
            channel.basicConsume("TMSG", true, new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println(new String(body));
                }
            });
        }
    }
}
